
#include "nane/core/crt/Module_.h"
#include "nane/core/function/Functor.h"
#include "nane/core/assert.h"
#include <cstring>

namespace nane 
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    Module::Module( ModuleManager::Implementation* _creator, ModuleHandle* _handle, const ModuleInfo* _info, const char* _name )
        : Disposable<Module, SubSystemProductImplBase<ModuleManager::Implementation, ModuleHandle*, IModule> >( _creator, _handle )
        , m_info( _info )
        , m_name( NULL )
    {
        NANE_ASSERT( _name != NULL, "Name must be valid" );
        m_name = new char[std::strlen(_name)+1];
        std::strcpy(m_name, _name);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    Module::~Module()
    {
        delete[] m_name;
        m_name = NULL;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    const ModuleInfo* Module::GetInfo()
    {
        return m_info;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    const char* Module::GetName()
    {
        return m_name;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
